package Util;

import java.sql.*;
import java.util.List;

public class JavaUtil {

    private static String driver="com.mysql.jdbc.Driver";
    private static String url="jdbc:mysql://localhost:3306/library?useSSL=false&useUnicode=true&characterEncoding=utf-8";
    //    private static String url="jdbc:mysql://localhost:3306/test2?useSSL=false&useUnicode=true&characterEncoding=utf-8";
    //    private static String url="jdbc:mysql://localhost:3306/test2?useSSL=false&useUnicode=true&charaEncoding=utf-8";
    private static String username="root";
    private static String password="root";
    private static Connection con=null;    //连接
    private static PreparedStatement ps;   //预编译SQL对象
    private static  ResultSet rs=null;    //结果集对象
    //定义为成员变量，有利于全局调用
//static 静态的，被static修饰的方法和变量可以用

    //获取链接
    public static boolean getConn() throws ClassNotFoundException, SQLException {
        Class.forName(driver);
        con= DriverManager.getConnection(url,username,password);
        return true;

    }



    //增删改
    //修改语句为返回值int  传入两个参数 对象为list的集合
    public static int executeUpdate(String sql, List list) throws SQLException, ClassNotFoundException {
        int updateRows=0;  //修改的行数
        if(getConn()==true){
            ps=con.prepareStatement(sql);
            for(int i=0;i<list.size();i++){
                ps.setObject(i+1, list.get(i));
            }
            updateRows=ps.executeUpdate();

        }
        return updateRows;
    }



    //修改语句为返回值int  传入两个参数 对象为object的数组
    public static int executeUpdate(String sql,Object[] params) throws SQLException, ClassNotFoundException {
        int updateRows=0;  //修改的行数
        if(getConn()==true){
            PreparedStatement ps=con.prepareStatement(sql);
            for(int i=0;i<params.length;i++){
                ps.setObject(i+1,params[i]);
            }
            updateRows=ps.executeUpdate();

        }
        return updateRows;
    }


    public static int executeUpdate(String sql) throws SQLException, ClassNotFoundException {
        int updateRows=0;  //修改的行数
        if(getConn()==true){
            PreparedStatement ps=con.prepareStatement(sql);
            updateRows=ps.executeUpdate();

        }
        return updateRows;
    }



    //   //查询语句为返回值resultset  体现为两个值，一个为集合list的传入，大多从控制台输入进来
    public static ResultSet executeQuery(String sql, List list) throws SQLException, ClassNotFoundException {
        ResultSet rs=null;
        if(getConn()){
            ps=con.prepareStatement(sql);
            for(int i=0;i<list.size();i++){
                ps.setObject(i+1,list.get(i));
                rs=ps.executeQuery();
            }
            ResultSet updateRows = ps.executeQuery();
        }
        return rs;
    }



    //查询语句为返回值resultset  体现为两个值，一个为数组的传入，大多从控制台输入进来
    public static ResultSet executeQuery(String sql,Object[] params) throws SQLException, ClassNotFoundException {
        ResultSet rs=null;
        if(getConn()){
            ps=con.prepareStatement(sql);
            for(int i=0;i< params.length;i++){
                ps.setObject(i+1,params[i]);
                rs=ps.executeQuery();
            }
//                ResultSet updateRows = ps.executeQuery();

        }
        return rs;
    }


    //查询语句为返回值resultset的传入参数值是一个体现为只查询没有从控制台输入
    public static ResultSet executeQuery(String sql) throws SQLException, ClassNotFoundException {

        if(getConn()){
            ps=con.prepareStatement(sql);
            rs = ps.executeQuery();
        }
        return rs;
    }


    //关闭链接  rs,ps,con定义为全局变量
    public static void close() throws SQLException {
        if(rs!=null){
            rs.close();
        }
        if(ps!=null){
            ps.close();
        }
        if(con!=null){
            con.close();
        }
    }

}
